#define _CRT_SECURE_NO_WARNINGS 1

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;

//const int N = 1010;
//int a[N][N], s[N][N];
//int n, m, q;
//
//int main()
//{
//	scanf("%d%d%d", &n, &m, &q);
//	for (int i = 1; i <= n; i++)
//	{
//		for (int j = 1; j <= m; j++)
//		{
//			scanf("%d", &a[i][j]);
//		}
//	}
//
//	for (int i = 1; i <= n; i++)
//	{
//		for (int j = 1; j <= m; j++)
//		{
//			s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];
//		}
//	}
//	while (q--)
//	{
//		int x1, y1, x2, y2;
//		scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
//		printf("%d\n", s[x2][y2] - s[x2][y1 - 1] - s[x1 - 1][y2] + s[x1 - 1][y1 - 1]);
//	}
//	return 0;
//}


//const int N = 2500010;
//int n, m;
//struct sum
//{
//    int  s, c, d;
//    bool operator<(const sum& t) const
//    {
//        if (s != t.s) return s < t.s;
//        if (c != t.c) return c < t.c;
//        return d < t.d;
//    }
//}sum[N];
//
//
//int main()
//{
//    cin >> n;
//    for (int c = 0; c * c <= n; c++)
//    {
//        for (int d = c; c * c + d * d <= n; d++)
//        {
//            sum[m++] = { c * c + d * d, c, d };
//        }
//    }
//    sort(sum, sum + m);
//    for (int a = 0; a < n; a++)
//    {
//        for (int b = a; a * a + b * b < n; b++)
//        {
//            int t = n - (a * a + b * b);
//            int l = 0, r = m - 1;
//            while (l < r)
//            {
//                int mid = (l + r) / 2;
//                if (sum[mid].s >= t)
//                {
//                    r = mid;
//                }
//                else
//                {
//                    l = mid + 1;
//                }
//            }
//            if (sum[l].s == t)
//            {
//                printf("%d %d %d %d", a, b, sum[l].c, sum[l].d);
//                return 0;
//            }
//        }
//    }
//    return 0;
//}


//const int N = 100010;
//int n, k;
//long long s[N],cnt[N];
//long long ans;
//
//int main()
//{
//    scanf("%d%d", &n, &k);
//    for (int i = 1; i <= n; i++)
//    {
//        scanf("%lld", &s[i]);
//        s[i] += s[i - 1];
//    }
//    cnt[0] = 1;
//    for (int i = 1; i <= n; i++)
//    {
//        ans += cnt[s[i] % k];
//        cnt[s[i] % k]++;
//    }
//    printf("%lld", ans);
//    return 0;
//}

//
//class cycle
//{
//public:
//	void getr(int r)
//	{
//		_r = r;
//	}
//	double getV()
//	{
//		return 3.14 * _r * _r;
//	}
//private:
//	int _r;
//};
//
//int main()
//{
//	for (int i = 0; i < 3; i++)
//	{
//		int r;
//		cin >> r;
//		cycle c;
//		c.getr(r);
//		cout << c.getV() << endl;
//	}
//	return 0;
//}


//int main()
//{
//	int n = 4;
//	int i = 0;
//	while (i < n)
//	{
//		i++;
//	}
//	return 0;
//}


const int N = 5010;
int  s[N][N];
int n, r;


int main()
{
    scanf("%d%d", &n, &r);
    for (int i = 0; i < n; i++)
    {
        int x, y, w;
        scanf("%d%d%d", &x, &y, &w);
        s[x + 1][y + 1] += w;
    }
    for (int i = 1; i <= 5001; i++)
    {
        for (int j = 1; j <= 5001; j++)
        {
            s[i][j] += s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1];
        }
    }
    int ans = 0;
    for (int i = r; i <= 5001; i++) {
        for (int j = r; j <= 5001; j++) {
            ans = max(ans, s[i][j] - s[i - r][j] - s[i][j - r] + s[i - r][j - r]);
        }
    }
    printf("%d", ans);
    return 0;
}